package mysql8学习.初级.第15章_存储过程与存储函数;

/**
 * 存储函数
 *
 *      DELIMITER $            //设置$为结束符号  $可变
 *      CREATE FUNCTION 存储函数名(参数名 参数类型,...)
 *      RETURNS 返回值类型
 *          [characteristics ...]  //特性约束  可有可无
 *          @see C_存储约束   详情见
 *          如：
 *              DETERMINISTIC       //确定的
 *              CONTAINS SQL       //包含SQL语句
 *              READS SQL DATA      //当前存储过程的子程序中包含读数据的SQL语句
 *      BEGIN
 *         //函数体   #函数体中肯定有 RETURN 语句 如
 *          RETURN (SELECT 返回的字段 FROM 表名 WHERE 条件，一般会用到参数);
 *      END $
 *      DELIMITER ;         //修改回来
 *
 * 1、参数列表：
 *      指定参数为IN、OUT或INOUT只对PROCEDURE是合法的，
 *      FUNCTION中总是默认为IN参数。
 * 2、RETURNS type 语句表示函数返回数据的类型；
 *      RETURNS子句只能对FUNCTION做指定，对函数而言这是 强制 的。
 *      它用来指定函数的返回类型，而且函数体必须包含一个 RETURN value 语句。
 * 3、characteristic 创建函数时指定的对函数的约束。
 *      取值与创建存储过程时相同，这里不再赘述。
 * 4、函数体也可以用BEGIN END来表示SQL代码的开始和结束。
 *      如果函数体只有一条语句，也可以省略 BEGIN…END。
 *
 *  若在创建存储函数中报错
 *      “`you might want to use the less safe log_bin_trust_function_creators variable`”，
 *  有两种处理方法：
 * - 方式1：加上必要的函数特性“[NOT] DETERMINISTIC”和
 *      “{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA}”
 * - 方式2：创建函数前 设置数据库 默认这个值为0  会检验特性约束  所以要写特性约束   改成1就不用管了
 *     SET GLOBAL log_bin_trust_function_creators = 1;  改成一才能使用存储函数
 *
 * 只有 IN 而且 默认不用写   因为 RETURNS 表示 OUT
 *
 *     SET @自己起的名字 = 自己命名的值;   :=  真正意义上的赋值符号  都行
 * 调用   值直接就返回了
 *      SELECT 函数名;
 *
 *
 */

public class F_存储函数 {
}
